Spring Cloud Feign Client তৈরি এবং কনফিগার করা

Spring Cloud Feign (Declarative REST Client) - স্প্রিং ক্লাউড (Spring Cloud) - Java Technologies

298

Spring Cloud Feign Client হল একটি declarative HTTP client, যা Spring Cloud দ্বারা ব্যবহৃত হয় মাইক্রোসার্ভিসে HTTP রিকোয়েস্ট করার জন্য। Feign সহজে HTTP ক্লায়েন্ট কল করার একটি উপায় প্রদান করে, এবং এটি Spring Boot-এর সাথে ইন্টিগ্রেট করা খুবই সহজ। Feign Client অ্যাপ্লিকেশনগুলি একে অপরের সাথে যোগাযোগ করার জন্য ব্যবহার করা হয়, যেমন মাইক্রোসার্ভিসের মধ্যে।

ধাপ ১: প্রয়োজনীয় ডিপেনডেন্সি যোগ করুন

Feign Client কাজ করার জন্য আপনাকে কিছু ডিপেনডেন্সি আপনার pom.xml ফাইলে যোগ করতে হবে।

Maven Dependency:

<dependencies>
    <!-- Spring Boot Starter Web for REST API -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>

    <!-- Spring Cloud Feign -->
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-openfeign</artifactId>
    </dependency>

    <!-- Spring Boot Starter Test for testing -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
        <scope>test</scope>
    </dependency>
</dependencies>

এখানে, spring-cloud-starter-openfeign ফিচারটি Feign Client-এর জন্য মূল ডিপেনডেন্সি।

ধাপ ২: Feign Client এনাবল করা

Spring Boot অ্যাপ্লিকেশন থেকে Feign Client ব্যবহার করতে, আপনাকে @EnableFeignClients এনোটেশন ব্যবহার করতে হবে।

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.openfeign.EnableFeignClients;

@SpringBootApplication
@EnableFeignClients
public class FeignClientApplication {

    public static void main(String[] args) {
        SpringApplication.run(FeignClientApplication.class, args);
    }
}

এখানে, @EnableFeignClients এনোটেশন Spring Boot অ্যাপ্লিকেশনকে Feign ক্লায়েন্ট ব্যবহার করার অনুমতি দেয়।

ধাপ ৩: Feign Client তৈরি করুন

Feign Client একটি ইন্টারফেস হিসেবে কাজ করে, যা API রিকোয়েস্টের জন্য HTTP মেথডগুলো ডিফাইন করে।

Feign Client Interface:

import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;

@FeignClient(name = "user-service", url = "http://localhost:8081")
public interface UserClient {

    @GetMapping("/users/{id}")
    String getUserById(@PathVariable("id") Long id);
}

এখানে:

  • @FeignClient এনোটেশনটি Feign Client ইন্টারফেসকে একটি HTTP ক্লায়েন্টে রূপান্তরিত করে, যা user-service নামক সার্ভিসের API এ যোগাযোগ করে।
  • url প্রপার্টি দিয়ে user-service এর URL বা সার্ভিস পাথ উল্লেখ করা হয়।
  • @GetMapping বা অন্যান্য HTTP মেথডের (POST, PUT, DELETE ইত্যাদি) সাহায্যে রিকোয়েস্ট পাথ নির্ধারণ করা হয়।

ধাপ ৪: Feign Client ইনজেক্ট করা

Feign Client তৈরি করার পর, আপনি এটি আপনার সার্ভিসে ব্যবহার করতে পারেন।

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

@Service
public class UserService {

    private final UserClient userClient;

    @Autowired
    public UserService(UserClient userClient) {
        this.userClient = userClient;
    }

    public String getUserDetails(Long id) {
        return userClient.getUserById(id); // Feign Client কল
    }
}

এখানে, UserClient ইনজেক্ট করা হয়েছে এবং এটি ব্যবহার করে getUserById মেথড কল করা হচ্ছে।

ধাপ ৫: Configuring Feign Client

আপনি Feign Client কনফিগার করতে পারেন, যেমন কাস্টম টাইমআউট, লোড ব্যালেন্সিং এবং অন্যান্য অপশন।

Feign Configuration:

import feign.Logger;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class FeignConfig {

    @Bean
    Logger.Level feignLoggerLevel() {
        return Logger.Level.FULL; // Log complete details
    }
}

এখানে, Logger.Level.FULL ব্যবহার করে Feign-এর লগিং ডিটেইলস সম্পূর্ণ করা হয়েছে। আপনি আরও বিভিন্ন কনফিগারেশন যেমন টাইমআউট, রিট্রাই পলিসি ইত্যাদি কাস্টমাইজ করতে পারেন।

Customizing Feign Timeout:

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import feign.Request;
import java.util.concurrent.TimeUnit;

@Configuration
public class FeignConfig {

    @Bean
    public Request.Options requestOptions() {
        return new Request.Options(5000, TimeUnit.MILLISECONDS, 10000, TimeUnit.MILLISECONDS, true);
    }
}

এখানে, requestOptions() মেথডে কনফিগারেশন নির্ধারণ করা হয়েছে যাতে connection timeout 5 সেকেন্ড এবং read timeout 10 সেকেন্ড করা হয়েছে।

ধাপ ৬: Feign Client Test

Feign Client এর জন্য ইউনিট টেস্ট করা খুব সহজ, কারণ এটি সহজেই Mock করা যায়।

Test Example:

import org.junit.jupiter.api.Test;
import org.mockito.Mock;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.boot.test.mock.mockito.MockBean;

import static org.mockito.Mockito.when;
import static org.junit.jupiter.api.Assertions.assertEquals;

@SpringBootTest
public class UserServiceTest {

    @MockBean
    private UserClient userClient;

    @Autowired
    private UserService userService;

    @Test
    public void testGetUserDetails() {
        // Mock Feign Client response
        when(userClient.getUserById(1L)).thenReturn("User with ID: 1");

        // Call service method
        String result = userService.getUserDetails(1L);

        // Assert the response
        assertEquals("User with ID: 1", result);
    }
}

এখানে, @MockBean ব্যবহার করে UserClient কে মক করা হয়েছে এবং এর রেসপন্স মক করা হয়েছে।

উপসংহার:

  • Feign Client একটি ডিক্লারেটিভ HTTP ক্লায়েন্ট যা Spring Cloud এর অংশ হিসেবে ব্যবহৃত হয়, এবং এটি REST API কল সহজ করে দেয়।
  • Spring Boot অ্যাপ্লিকেশন তৈরি করার সময় @FeignClient এনোটেশন ব্যবহার করে মাইক্রোসার্ভিসের মধ্যে HTTP রিকোয়েস্ট পরিচালনা করা যায়।
  • Feign Client কাস্টমাইজেশন যেমন টাইমআউট, লগিং এবং অন্যান্য কনফিগারেশন খুব সহজেই করা যায়।
  • Feign Client ব্যবহার করার সময়, আপনি Unit Testing এবং Mocking সুবিধা পাবেন।

Spring Cloud Feign Client ব্যবহার করে আপনার মাইক্রোসার্ভিসের মধ্যে সহজে যোগাযোগ স্থাপন করতে পারবেন।

Content added By
Promotion

Are you sure to start over?

Loading...